package com.lw.count;

import java.util.concurrent.Semaphore;
import java.util.concurrent.TimeUnit;

/**
 * @author LW
 * @2020/8/20 11:13
 */
//SemaphoreDemo信号灯
public class SemaphoreDemo {

    public static void main(String[] args) {
        //线程数量：停车位  *** (限流的时候可应用)***    同一时间（允许运行的线程数量）
        Semaphore semaphore = new Semaphore(3);//三个许可证
        for (int i = 1; i <= 6; i++) {
            new Thread(()->{
                //acquire()获得
                try {
                    semaphore.acquire();//获取许可证   **将可用许可证数量减少一个
                    System.out.println(Thread.currentThread().getName()+"-->抢到车位！！");
                    TimeUnit.SECONDS.sleep(2);
                    System.out.println(Thread.currentThread().getName()+"***离开车位！！");
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }finally {//关闭或释放的操作   都放在finally中
                    semaphore.release();//释放许可证，将其返回到信号灯。  **发布许可证，将可用许可证的数量增加一个。
                }
                //release()释放
            },String.valueOf(i)).start();
        }

    }
}
